package com.xbongbong.i18n.util;

import java.util.Locale;
import javax.annotation.Resource;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

/**
 * 封装 MessageSource 方法
 *
 * @author kaka
 * @version v1.0
 * @date 2019/12/24 14:43
 * @since v1.0
 */
@Component
public class LocaleMessage {

    //private static final Logger LOG = LoggerFactory.getLogger(LocaleMessage.class);

    @Resource
    private MessageSource messageSource;

    /**
     * @param code：对应文本配置的key.
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code) {
        return this.getMessage(code, new Object[]{});
    }

    /**
     * @param code 对应文本配置的key.
     * @param defaultMessage 默认消息字符串
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code, String defaultMessage) {
        return this.getMessage(code, null, defaultMessage);
    }

    /**
     * @param code 对应文本配置的key.
     * @param defaultMessage 默认消息字符串
     * @param locale 对应语言地区
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code, String defaultMessage, Locale locale) {
        return this.getMessage(code, null, defaultMessage, locale);
    }

    /**
     * @param code 对应文本配置的key.
     * @param locale 对应语言地区
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code, Locale locale) {
        return this.getMessage(code, null, "", locale);
    }

    /**
     * @param code 对应文本配置的key.
     * @param args 参数
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code, Object[] args) {
        return this.getMessage(code, args, "");
    }

    /**
     * @param code 对应文本配置的key
     * @param args 参数
     * @param locale 对应语言地区
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code, Object[] args, Locale locale) {
        return this.getMessage(code, args, "", locale);
    }

    /**
     * @param code 对应文本配置的key
     * @param args 参数
     * @param defaultMessage 默认消息字符串
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code, Object[] args, String defaultMessage) {
        Locale locale = LocaleContextHolder.getLocale();
        return this.getMessage(code, args, defaultMessage, locale);
    }

    /**
     * @param code 对应文本配置的key
     * @param args 参数
     * @param defaultMessage 默认消息字符串
     * @param locale 对应语言地区
     * @return 对应地区的语言消息字符串
     */
    public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {
        return messageSource.getMessage(code, args, defaultMessage, locale);
    }

}